home *** CD-ROM | disk | FTP | other *** search
/ The Fatted Calf / The Fatted Calf.iso / Applications / Games / Risk / Risk.app / Random1.1.source / BinTest.m next >
Text File  |  1992-02-15  |  3KB  |  153 lines

  1. //
  2. // BinTest
  3. //
  4. // This program tests a random number generator by running it n times
  5. // with m bins for sorting over the interval [0, 1].
  6. //
  7.  
  8.  
  9. #import "Random.h"
  10. #import <math.h>
  11. #import <stdio.h>
  12. #import <stdlib.h>
  13.  
  14.  
  15. #define FUNC        doublepeakfunc
  16.  
  17.  
  18. #define DEFAULT_N    1000
  19. #define DEFAULT_M    20
  20.  
  21.  
  22. #define MAX_BAR        40
  23.  
  24.  
  25. #define TAN_PI    3.14159267
  26. #define TAN_2DIVPI    (2.0 / TAN_PI)
  27.  
  28. double tanfunc(double x)
  29. {
  30. //    return (tan(TAN_2DIVPI * x - 0.5) + 0.5);
  31.     return (1 + tan((x - 0.5) / TAN_PI)) / 2.0;
  32. }
  33.  
  34.  
  35. #define SINONE        0.8414709848
  36.  
  37. double sinfunc(double x)
  38. {
  39.     return (sin(x) / SINONE);
  40. }
  41.  
  42.  
  43. double linefunc(double x)
  44. {
  45.     return (x);
  46. }
  47.  
  48.  
  49. double squarefunc(double x)
  50. {
  51.     return (x * x);
  52. }
  53.  
  54.  
  55. double parafunc(double x)
  56. {
  57.     double y = x - 1.0;
  58.     
  59.     return (1 - (y * y));
  60. }
  61.  
  62.  
  63. double doublepeakfunc(double x)
  64. {
  65.     return (1 + sin((x / TAN_PI) - 0.5)) / 2.0;
  66. }
  67.  
  68.  
  69. int main(int argc, char *argv[])
  70. {
  71.     id        myRand;                // Random number generator.
  72.     int        n;                // Quantity of numbers to generate.
  73.     int        m;                // Number of bins in which to sort them.
  74.     int        max;                // Size of largest bin.
  75.     int        i;                // Generic loop variable.
  76.     int        j;                // Generic loop variable.
  77.     double    x;                // The random number.
  78.     int        slot;                // The sorted position of a number.
  79.     int        barsize;            // The length of a result bar.
  80.     int        *bin;                // The bin array (dynamically allocated).
  81.     
  82.     myRand = [[Random alloc] init];
  83.     
  84.     switch(argc) {
  85.         case 2:
  86.         sscanf(argv[1], "%d", &n);;
  87.         m = DEFAULT_M;
  88.         break;
  89.     case 3:
  90.         sscanf(argv[1], "%d", &n);;
  91.         sscanf(argv[2], "%d", &m);;
  92.         break;
  93.     default:
  94.         n = DEFAULT_N;
  95.         m = DEFAULT_M;
  96.         break;
  97.     }
  98.     
  99.     //
  100.     // Allocate and initialize slot array:
  101.     //
  102.     
  103.     bin = (int *)malloc(m * sizeof(int));
  104.     for(i = 0; i < m; i++)
  105.         bin[i] = 0;
  106.     
  107.     //
  108.     // Make n random numbers:
  109.     //
  110.         
  111.     for(i = 0; i < n; i++) {
  112.         x = [myRand gaussian];
  113.     
  114.     slot = (int)floor(x * m);
  115.     if((slot >= 0) && (slot < m)) {        // If it is in range,
  116.         if((++bin[slot]) > max) {        //   count it.
  117.         max = bin[slot];
  118.         }
  119.     }
  120.     }
  121.     
  122.     //
  123.     // Print the results:
  124.     //
  125.     
  126.     for(i = 0; i < m; i++) {
  127.         printf("%1.6f - %1.6f: %6d:", i * (1.0 / m), (i + 1) * (1.0 / m), bin[i]);
  128.     
  129.     barsize = (int)((double)bin[i] / ((double)max / (double)MAX_BAR));
  130.     for(j = 0; j < barsize; j++)
  131.         printf("*");
  132.     printf("\n");
  133.     }
  134.     
  135.     printf("Max = %d\n\n", max);
  136.     
  137.     //
  138.     // Clean up:
  139.     //
  140.     
  141.     free(bin);
  142.     
  143.     //
  144.     // Return to caller:
  145.     //
  146.     
  147.     return 0;
  148. }
  149.  
  150.  
  151. //
  152. // End of file.
  153. //